// cloudfunctions/generateOrderNumber/index.js
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const _ = db.command

exports.main = async (event, context) => {
  // 获取当前日期，格式：yymmdd
  const now = new Date()
  const year = now.getFullYear().toString().slice(2)
  const month = (now.getMonth() + 1).toString().padStart(2, '0')
  const day = now.getDate().toString().padStart(2, '0')
  const dateStr = year + month + day

  // 计数器集合
  const counterCollection = db.collection('counter')
  try {
      // 尝试获取当天的计数器记录
      let record
      try {
        record = await counterCollection.doc(dateStr).get()
      } catch (err) {
        // 文档不存在，创建新记录
        if (err.errCode === -1) { // 文档不存在的错误码
          await counterCollection.add({
            data: {
              _id: dateStr,
              seq: 0 // 初始化为0，下面会立即自增
            }
          })
          // 重新获取新创建的文档
          record = await counterCollection.doc(dateStr).get()
        } else {
          throw err // 其他错误直接抛出
        }
      }

      // 确保记录存在后更新序列号
      const currentSeq = record.data.seq + 1
      await counterCollection.doc(dateStr).update({
        data: {
          seq: _.inc(1)
        }
      })

      // 生成订单号
      const orderNumber = dateStr + currentSeq.toString().padStart(4, '0')
      return {
        orderNumber
      }
  } catch (err) {
    console.error('事务失败', err)
    // 返回更友好的错误信息
    return {
      code: 'FUNCTIONS_EXECUTE_FAIL',
      message: '生成订单号失败，请重试',
      detail: err.message
    }
  }
}